import client.KeyBoard;
import invoker.GameCharacter;

/**
 * 命令模式（Command Pattern）是一种行为型设计模式，它将一个请求封装为一个对象，
 * 将一个或一组操作封装成一个对象传递给调用者，然后由调用者调用来实现最终目的
 * 跟回调有点类似
 */
public class Main {
    /**
     * 命令模式涉及到以下几种角色：
     * 接收者（Receiver）：执行命令所要求的操作。接收者并不知道它通过谁来调用它的方法，它只知道自己执行什么操作。
     * 命令（Command）：声明一个执行操作的接口。通常，这个接口有一个方法execute()，用于执行命令。
     * 具体命令（Concrete Command）：实现命令接口，通过调用接收者的业务方法来完成具体操作。
     * 调用者（Invoker）：请求命令执行。它通常有一个方法setCommand(Command command)用于设置命令，和一个方法executeCommand()用于执行命令。
     * 客户端（Client）：创建具体命令对象并将其传递给调用者。
     */
    public static void main(String[] args) {
        // 现在举个例子，通过键盘预输入指令操控一名游戏角色
        KeyBoard control = new KeyBoard();
        GameCharacter character = new GameCharacter();
        inputCommand(character, control);
        character.executeAllCommand();

    }

    public static void inputCommand(GameCharacter character, KeyBoard control) {
        character.inputCommand(control.pressD());
        character.inputCommand(control.pressA());
        character.inputCommand(control.pressA());
        character.inputCommand(control.pressS());
        character.inputCommand(control.pressA());
        character.inputCommand(control.pressA());
        character.inputCommand(control.pressStop());
        character.inputCommand(control.pressRun());
        character.inputCommand(control.pressW());
        character.inputCommand(control.pressS());
        character.inputCommand(control.pressStop());
    }
}